#include "ConsultaCaminoMinimo.h"

ConsultaCaminoMinimo::ConsultaCaminoMinimo(string origen, string destino){
	nombreOrigen = origen;
	nombreDestino = destino;
}

void ConsultaCaminoMinimo::ejecutar(){
	string idOrigen = buscarID( nombreOrigen );
	string idDestino = buscarID ( nombreDestino );

	if ( idOrigen == "-1" ){
		cout << "No existe ninguna persona con el nombre " << nombreOrigen << "." << endl;
		cout << "Por favor verifique haberlo ingresado correctamente." << endl;
		return;
	}

	if ( idDestino == "-1" ){
		cout << "No existe ninguna persona con el nombre " << nombreDestino << "." << endl;
		cout << "Por favor verifique haberlo ingresado correctamente." << endl;
		return;
	}

	if ( idDestino == idOrigen ){
		cout << "La distancia de una persona a sí misma es 0." << endl;
		return;
	}

	emitirCamino( idOrigen, idDestino );

}

void ConsultaCaminoMinimo::emitirCamino( string idOrigen, string idDestino ){
	bool finalizado = false;
	Camino miCamino( idOrigen, idDestino );

	string izq = idOrigen;
	string der = idDestino;

	while ( !finalizado ){

		string idPersonaAux;
		string idPeliculaAux;

		idPersonaAux = getSiguienteIdPersona( izq, der );
		idPeliculaAux = getSiguienteIdPelicula( izq, der );

		if (idPersonaAux == "-1"){
			cout << "Las personas no se encuentran relacionadas." << endl;
			return;
		}

		finalizado = ( idPersonaAux == "0" );

		if ( finalizado )
			miCamino.cerrarCamino( idPeliculaAux );
		else {
			//Observación: la condición podría ser la opuesta, según qué mitad se tome de la matriz
			if( izq < der ){
				miCamino.agregarIzquierdo( idPersonaAux, idPeliculaAux );
				izq = idPersonaAux;
			}
			else {
				miCamino.agregarDerecho ( idPersonaAux, idPeliculaAux );
				der = idPersonaAux;
			}
		}

	}

	miCamino.imprimir();
}

/********************************************************/
//FALTAN IMPLEMENTAR
string ConsultaCaminoMinimo::getSiguienteIdPersona( string idPersona1, string idPersona2 ){
	return "";
}
string ConsultaCaminoMinimo::getSiguienteIdPelicula( string idPersona1, string idPersona2 ){
	return "";
}
/*******************************************************/

/************************************/
//FALTA IMPLEMENTAR
string ConsultaCaminoMinimo::buscarID(string nombre){
	if (nombre == "Robert De Niro") return "1";
	if (nombre == "Cuba Gooding Jr.") return "2";
	if (nombre == "Al Pacino") return "3";
	if (nombre == "Jodie Foster") return "4";
	if (nombre == "Ed Harris") return "5";
	if (nombre == "Tom Cruise") return "6";
	if (nombre == "Marlon Brando") return "7";

	throw "NOMBRE NO ENCONTRADO";
}
/***********************************/
